package com.xihuani.tlatoa.service.impl; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Expression; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.xihuani.tlatoa.model.Resource; import com.xihuani.tlatoa.model.Sentence; import com.xihuani.tlatoa.service.ResourceService; @Service public class ResourceServiceImpl implements ResourceService { @PersistenceContext private EntityManager em; @Override @Transactional public List<Sentence> listSentences() { CriteriaQuery<Sentence> c = em.getCriteriaBuilder().createQuery(Sentence.class); Root<Sentence> roleRoot = c.from( Sentence.class ); return em.createQuery(c).getResultList(); } @Override @Transactional public List<Sentence> search(String sentence) { CriteriaQuery<Sentence> c = em.getCriteriaBuilder().createQuery(Sentence.class); Root<Sentence> roleRoot = c.from( Sentence.class ); c.select( roleRoot ); Expression<String> exp = roleRoot.get( "sentence" ); Predicate r = em.getCriteriaBuilder().like(exp, "%" + sentence + "%"); c.where( r ); return em.createQuery(c).getResultList(); } @Override @Transactional public void addSentence(Sentence sentence) { em.persist(sentence); } @Override @Transactional public void saveSentence(Sentence sentence) { em.merge(sentence); } @Override @Transactional public void deleteSentence(Integer sentenceId) { Sentence s = em.find(Sentence.class, sentenceId); if (null != s) { em.remove(s); } } @Override @Transactional public void addResource(Integer sentenceId, Resource resource) { Sentence s = em.find(Sentence.class, sentenceId); if (null != s) { resource.setSequenceOrder(s.getResources().size()); s.getResources().add(resource); resource.setSentence(s); } em.merge(s); } @Override @Transactional public void removeResource(Integer sentenceId, Integer resourceId) { Sentence s = em.find(Sentence.class, sentenceId); if (null != s) { List<Resource> resources = s.getResources(); for(int i = 0; i < resources.size(); i++) { Resource r = resources.get(i); if(r.getResourceId() == resourceId){ resources.remove(i); em.remove(r); } } } } @Override @Transactional public void sortResource(Integer sentenceId, Integer []resourceId) { Sentence s = em.find(Sentence.class, sentenceId); if (null != s) { List<Resource> resources = s.getResources(); ListIterator<Resource> it = resources.listIterator(); while(it.hasNext()) { Resource r = it.next(); for(int i = 0; i < resourceId.length; i++) { if(resourceId[i] == r.getResourceId()) { r.setSequenceOrder(i); } } } } em.merge(s); } @Override @Transactional public List<Resource> listResource(Integer sentenceId) { Sentence s = em.find(Sentence.class, sentenceId); if (null != s) { return s.getResources(); } return null; } }